package consul_demo

import (
	"protobuf/handler"
	"protobuf/pb"

	"github.com/hashicorp/consul/api"
	"github.com/sirupsen/logrus"
	"go-micro.dev/v4"
	"go-micro.dev/v4/logger"
)

func Run() error {
	// 初始化consul配置，客户端服务器需要一致
	// 获取consul操作对象
	client, err := api.NewClient(&api.Config{
		Address: "172.19.129.62:8500",
	})
	if err != nil {
		logrus.Fatal(err)
	}
	// 服务发现，从consul上获取健康的服务
	// params:
	// 	@service: 服务名。注册服务时指定该string
	// 	@tag: 外号/别名。如果有多个，任选一个
	// 	@passingOnly: 是否通过健康检查
	// 	@q: 查询参数，通常为nil
	// returns:
	// 	@ServiceEntry: 存储服务的切片
	//  @QueryMeta: 额外查询返回值，通常为nil
	//  @error: 错误信息
	// entries, _, err := client.Health().Service("FutureService", "future", true, &api.QueryOptions{})
	// if err != nil {
	// 	return err
	// }
	// http 调用
	// service := entries[0].Service
	logger.Info(client)

	return nil
}

func Reg() error {
	// 初始化consul配置，客户端服务器需要一致
	// 获取consul操作对象
	client, err := api.NewClient(&api.Config{
		Address: "172.19.129.62:8500",
	})

	if err != nil {
		logrus.Fatal(err)
	}

	// 注册服务，服务的常规配置
	registerService := api.AgentServiceRegistration{
		ID:      "1",
		Name:    "FutureService",
		Tags:    []string{"future", "consul"},
		Port:    1234,
		Address: "172.19.129.98",
		Check: &api.AgentServiceCheck{
			CheckID:  "consul future test",
			TCP:      "172.19.129.98:1234",
			Timeout:  "5s",
			Interval: "5s",
		},
	}

	// 将服务注册到consul上
	if err := client.Agent().ServiceRegister(&registerService); err != nil {
		logrus.Fatal(err)
	}

	// 设置监听
	// listener, err := net.Listen("tcp", ":1234")
	// if err != nil {
	// 	log.Fatal("listen failed, err:", err)
	// }

	// create service
	srv := micro.NewService(
		micro.Name("future"),
		micro.Version("latest"),
		micro.Address(":1234"), // 指定端口
		// 注册consul中心
		// micro.Registry(reg), // 注册到 consul 不能再用  micro call future Future.GetMinBar '{"instrument": "rb2205"}' 调用了!!!
	)

	// register handler
	if err := pb.RegisterFutureHandler(srv.Server(), &handler.Future{}); err != nil {
		logger.Fatal(err)
	}

	// run service
	err = srv.Run()
	return err
}
